<?php
/**
 * class BlockLRController
 * Выводит блок с комментариями ниже осного контента
 */
class CommentsController extends ComponentController implements IObservable{
    
    private $observers = array();
    private $model;
    private $view;
    
    public function __construct() {
        parent::__construct();
        $this->addObserver($this->messagesobserver);
        $this->model = new CommentsModel();
        $this->view = new CommentsView();
        
        $this->getMessagesBox();
        $this->getAddBox();
        return true;
    }
    
    /**
     * Валидатор для формы отправки нового комментария
     * @param type $data
     * @return boolean 
     */
    private function messagesValidate($data) {
        return true;
    }
    /**
     * Сабмиттер для формы отправки нового сообщения
     * @param type $data
     * @return type 
     */
    private function messagesSubmit($data) {  
        $data['from'] = $this->user->user_id;
        $this->fireEvent('message', array('message'=>"Комментарий добавлен"));
        $data['page'] = strtolower($_GET['rewritequery']);
        return $this->model->addComment($data);
    }

    /**
     * зАНИМАЕТСЯ ОТОБРАЖЕНИЕМ ТАБЛИЦЫ УЖЕ ПРИСЛАННЫХ СООБЩЕНИЙ К ДАННОЙ СТРАНИЦЕ
     * @return boolean 
     */
    private function getMessagesBox() {  
        if(@$_POST['submit'])
        {
            if($this->messagesValidate($_POST))
            {
                $this->messagesSubmit($_POST);
            }
        }
        $this->load->library('Pager');
        //1-ый параметр - кол-во итемов на страницу
        $pager = new Pager(3, @$_GET['page'], @$_GET['pager_id']);
        
        $data = $this->model->getAllCommentsOfPagePager($_GET['rewritequery'], $pager);
       
        $pagedata = array();     
        $pagedata[] = array('data'=> CommentsView::getMessagesBox($data->rows), 'region'=>$this->region);
        $pagedata[] = array('data'=> CommentsView::getPager($pager), 'region'=>$this->region);
        $this->output($pagedata);

        return true;
    }
    /**
     * Отображает форму добавления нового комментария
     * @return boolean 
     */
    private function getAddBox() {
        $pagedata = array();     
        $pagedata[] = array('data'=> CommentsView::getAddBox(), 'region'=>'content');
        $this->output($pagedata);
        return true;
    }

    /**
     * реализация интерфеса IObservable
     * @param IObserver $objObserver 
     */
    public function addObserver(IObserver $objObserver) {
        $this->observers[] = $objObserver;
    }
   /**
    * реализация интерфеса IObservable
    * @param type $eventType
    * @param type $data 
    */
    public function fireEvent($eventType, $data) {
        if (is_array($this->observers)) {
            foreach ($this->observers as $objObserver) {
                $objObserver->notify($eventType, $data);
            }
        }
    }
    
    
}
?>
